home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Resources / Online / Term / Extras / Source / gtlayout-source.lha / LTP_ImageClass.c < prev    next >
C/C++ Source or Header  |  1996-08-22  |  3KB  |  149 lines

  1. /*
  2. **    GadTools layout toolkit
  3. **
  4. **    Copyright © 1993-1996 by Olaf `Olsen' Barthel
  5. **        Freely distributable.
  6. **
  7. **    :ts=4
  8. */
  9.  
  10. #ifndef _GTLAYOUT_GLOBAL_H
  11. #include "gtlayout_global.h"
  12. #endif
  13.  
  14.  
  15. /*****************************************************************************/
  16.  
  17.  
  18. STATIC ULONG
  19. ImageClassDraw(struct Image *image,struct impDraw *drawMsg,ImageInfo *imageInfo)
  20. {
  21.     LTP_DrawBox(drawMsg->imp_RPort,drawMsg->imp_DrInfo,image->LeftEdge + drawMsg->imp_Offset.X,image->TopEdge + drawMsg->imp_Offset.Y,image->Width,image->Height,drawMsg->imp_State == IDS_SELECTED,drawMsg->imp_State == IDS_DISABLED,imageInfo);
  22.  
  23.     return(TRUE);
  24. }
  25.  
  26.  
  27. /*****************************************************************************/
  28.  
  29.  
  30. STATIC ULONG
  31. ImageClassErase(struct Image *image,struct impErase *eraseMsg)
  32. {
  33.     LTP_EraseBox(eraseMsg->imp_RPort,eraseMsg->imp_Offset.X + image->LeftEdge,eraseMsg->imp_Offset.Y + image->TopEdge,image->Width,image->Height);
  34.  
  35.     return(TRUE);
  36. }
  37.  
  38.  
  39. /*****************************************************************************/
  40.  
  41. STATIC ULONG
  42. ImageClassNew(struct IClass *class,Object *object,struct opSet *SetMethod)
  43. {
  44.     struct TagItem *Item;
  45.  
  46.     if(Item = FindTagItem(IIA_ImageType,SetMethod->ops_AttrList))
  47.     {
  48.         struct Image *NewImage;
  49.  
  50.         if(NewImage = (struct Image *)DoSuperMethodA(class,object,(Msg)SetMethod))
  51.         {
  52.             struct ImageInfo    *MoreInfo = INST_DATA(class,NewImage);
  53.             struct TagItem        *List = SetMethod->ops_AttrList;
  54.  
  55.             memset(MoreInfo,0,sizeof(struct ImageInfo));
  56.  
  57.             MoreInfo->ImageType = Item->ti_Data;
  58.  
  59.             while(Item = NextTagItem(&List))
  60.             {
  61.                 switch(Item->ti_Tag)
  62.                 {
  63.                     case IIA_GlyphWidth:
  64.                         MoreInfo->GlyphWidth = Item->ti_Data;
  65.                         break;
  66.  
  67.                     case IIA_GlyphHeight:
  68.                         MoreInfo->GlyphHeight = Item->ti_Data;
  69.                         break;
  70.  
  71.                     case IIA_Lines:
  72.                         MoreInfo->Lines = (STRPTR *)Item->ti_Data;
  73.                         break;
  74.  
  75.                     case IIA_LineCount:
  76.                         MoreInfo->LineCount = Item->ti_Data;
  77.                         break;
  78.  
  79.                     case IIA_KeyStroke:
  80.                         MoreInfo->KeyStroke = (STRPTR)Item->ti_Data;
  81.                         break;
  82.  
  83.                     case IIA_Emboss:
  84.                         MoreInfo->Emboss = Item->ti_Data;
  85.                         break;
  86.  
  87.                     case IIA_Label:
  88.                         MoreInfo->Label = (STRPTR)Item->ti_Data;
  89.                         break;
  90.  
  91.                     case IIA_Font:
  92.                         if(!(MoreInfo->Font = OpenFont((struct TextAttr *)Item->ti_Data)))
  93.                         {
  94.                             CoerceMethod(class,object,OM_DISPOSE);
  95.  
  96.                             return(NULL);
  97.                         }
  98.  
  99.                         break;
  100.                 }
  101.             }
  102.  
  103.             return((ULONG)NewImage);
  104.         }
  105.     }
  106.  
  107.     return(NULL);
  108. }
  109.  
  110.  
  111. /*****************************************************************************/
  112.  
  113.  
  114. STATIC VOID
  115. ImageClassDispose(struct IClass *class,Object *object,Msg msg)
  116. {
  117.     struct ImageInfo *MoreInfo = INST_DATA(class,object);
  118.  
  119.     if(MoreInfo->Font)
  120.         CloseFont(MoreInfo->Font);
  121. }
  122.  
  123.  
  124. /*****************************************************************************/
  125.  
  126.  
  127. ULONG SAVE_DS ASM
  128. LTP_ImageDispatch(REG(a0) struct IClass *class,REG(a2) Object *object,REG(a1) Msg msg)
  129. {
  130.     switch(msg->MethodID)
  131.     {
  132.         case IM_ERASE:
  133.             return(ImageClassErase((struct Image *)object,(struct impErase *)msg));
  134.  
  135.         case IM_DRAW:
  136.             return(ImageClassDraw((struct Image *)object,(struct impDraw *)msg,(ImageInfo *)INST_DATA(class,object)));
  137.  
  138.         case OM_NEW:
  139.             return(ImageClassNew(class,object,(struct opSet *)msg));
  140.  
  141.         case OM_DISPOSE:
  142.             ImageClassDispose(class,object,msg);
  143.  
  144.             // Falls down to the default case...
  145.     }
  146.  
  147.     return(DoSuperMethodA(class,object,msg));
  148. }
  149.